﻿package joystick
{
	import flash.utils.ByteArray;
	
	/**
	 * サーバとやり取りする時に使うパケット.
	 * <p>
	 * フレームワーク内部で使用する。
	 * </p>
	 * @author Hikipuro
	 */
	public class Packet 
	{
		/**
		 * データタイプ.
		 */
		public var type:int;
		
		/**
		 * 未受信データ長.
		 * フレームワークの内部でのみ使用
		 */
		public var remain:int;
		
		/**
		 * パケットに付けるタグ.
		 * JoyClient の内部では使われない。ユーザ側で任意に設定可能。
		 * SENT イベントの text で受け取れる。
		 */
		public var tag:String;
		
		/**
		 * データ.
		 * 受信時 : 受信したデータが入る。
		 * 送信時 : 送信したいデータを入れる。
		 */
		public var data:ByteArray;
		
		// --------------------------------------------------------------------
		
		/**
		 * コンストラクタ.
		 */
		public function Packet() 
		{
			type = 0;
			data = new ByteArray();
			data.position = 0;
		}
		
		/**
		 * パケットをコピーする.
		 * @return
		 */
		public function clone():Packet
		{
			var packet:Packet = new Packet();
			packet.type      = type;
			packet.remain    = remain;
			packet.tag       = tag;
			packet.data.writeBytes(data, 0, data.length);
			packet.data.position = 0;
		
			return packet;
		}
		
		/**
		 * パケットの内容を文字列形式にする.
		 * @return
		 */
		public function toString():String
		{
			var text:String;
			text  = "Packet {";
			text += "type: " + type + ", ";
			text += "remain: " + remain + ", ";
			text += "tag: " + tag + ", ";
			text += "data.length: " + data.length + ", ";
			text += "data.position: " + data.position + " ";
			text += "}";
			
			return text;
		}
	}
	
}